﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Jc.MicroDesigner.Objects
{
    /// <summary>
    /// Объект для проброса пинов в составные элементы
    /// Привязывает к внешним пинам события и передаёт их сигналы во внутреннюю схему
    /// </summary>
    public class CompositeGate
    {
        private PIN _InnerPIN = null;
        private PIN _InterfacePIN = null;

        /// <summary>
        /// Создать шлюз
        /// </summary>
        /// <param name="inner_pin">Внутренний пин схемы</param>
        /// <param name="interface_pin">Внешний пин компонента</param>
        public CompositeGate(PIN inner_pin, PIN interface_pin)
        {
            _InnerPIN = inner_pin;
            _InterfacePIN = interface_pin;

            if (_InterfacePIN.Type == PINType.In)
            {
                _InterfacePIN.onRecieve += new Jc.MicroDesigner.Events.onRecieveHandler(InterfacePIN_onRecieve);
            }
            else
                if (_InterfacePIN.Type == PINType.Out)
                {
                    _InnerPIN.onSend += new Jc.MicroDesigner.Events.onSendHandler(InnerPIN_onSend);
                }
        }

        void InnerPIN_onSend(PIN sender)
        {
            _InterfacePIN.Send(sender.Signal);
        }

        void InterfacePIN_onRecieve(PIN sender)
        {
            _InnerPIN.Recieve(sender.Signal);
        }

        /// <summary>
        /// Внутренний пин
        /// </summary>
        public PIN InnerPIN
        {
            get { return _InnerPIN; }
        }

        /// <summary>
        /// Пин устройства, внешний
        /// </summary>
        public PIN InterfacePIN
        {
            get { return _InterfacePIN; }
        }
    }
}